Java基础——Stack源码分析

Stack是什么

  1. Stack是继承于Vector的基础上实现的栈
  2. Stack的特性就是队列的先进后出
class Stack<E> extends Vector<E>{}

Vector有的特性,Stack也有,复习下Vector的特性

  1. Vector是基于可变数组的List接口的同步实现
  2. Vector是有序的
  3. Vector允许null键和null值
  4. Vector已经不建议使用了
public class Vector<E>
    extends AbstractList<E>
    implements List<E>, RandomAccess, Cloneable, java.io.Serializable{

}
  1. Vector实现了List接口、底层使用数组保存所有元素,其操作基本上是对数组的操作
  2. Vector继承了AbstractList抽象类,它是一个数组队列,提供了相关的添加、删除、修改、遍历等功能
  3. Vector实现了RandmoAccess接口,即提供了随机访问功能,RandmoAccess是java中用来被List实现,为List提供快速访问功能的,我们可以通过元素的序号快速获取元素对象,这就是快速随机访问
  4. Vector实现了Cloneable接口,即覆盖了函数clone(),能被克隆
  5. Vector实现了java.io.Serializable接口,意味着ArrayList支持序列化

Stack的入队

Stack入队就是将对象加入到队列中,而后面的数据将会往后移动

public E push(E item) {
    addElement(item);

    return item;
}

Stack的出队

Stack出队就是将移除最后一个对象,相当于Stack的先进后出特性

public synchronized E pop() {
    E       obj;
    int     len = size();

    obj = peek();
    removeElementAt(len - 1);

    return obj;
}

Stack的栈顶

Stack的peek方法可以查询Stack的栈顶对象

public synchronized E peek() {
    int     len = size();

    if (len == 0)
        throw new EmptyStackException();
    return elementAt(len - 1);
}

Stack的查询

Stack支持数据的查询,调用lastIndexOf方法会从尾部遍历所有元素,找到对应的元素

public synchronized int search(Object o) {
    int i = lastIndexOf(o);

    if (i >= 0) {
        return size() - i;
    }
    return -1;
}

总结

Stack的源码就这么点,只不过是延续了Vector的特性,其最大的区别是Stack拥有栈的概念,即先进后出的特性

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

许英俊潇洒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值